#!/usr/bin/env python3
"""
启动自动故障分析系统
基于backend/app.py启动，集成自动故障检测和分析功能
"""

import os
import sys
import time
import requests
import json
from datetime import datetime

def check_service_health():
    """检查服务健康状态"""
    try:
        response = requests.get('http://localhost:5000/api/fault-analysis-status', timeout=5)
        if response.status_code == 200:
            data = response.json()
            if data['status'] == 'success':
                return data['data']
        return None
    except Exception as e:
        print(f"服务健康检查失败: {e}")
        return None

def wait_for_service(max_wait=60):
    """等待服务启动"""
    print("等待服务启动...")
    for i in range(max_wait):
        status = check_service_health()
        if status:
            print("✅ 服务已启动")
            return status
        print(f"等待中... ({i+1}/{max_wait})")
        time.sleep(1)
    
    print("❌ 服务启动超时")
    return None

def trigger_test_analysis():
    """触发测试分析"""
    try:
        print("触发测试故障分析...")
        response = requests.post('http://localhost:5000/api/trigger-fault-analysis', timeout=30)
        if response.status_code == 200:
            data = response.json()
            if data['status'] == 'success':
                print(f"✅ 测试分析成功: {data['message']}")
                if 'report_path' in data:
                    print(f"📄 报告路径: {data['report_path']}")
                return True
            else:
                print(f"⚠️ 测试分析警告: {data['message']}")
                return False
        else:
            print(f"❌ 测试分析失败: HTTP {response.status_code}")
            return False
    except Exception as e:
        print(f"❌ 测试分析请求失败: {e}")
        return False

def print_status(status):
    """打印系统状态"""
    print("\n" + "="*50)
    print("🔍 自动故障分析系统状态")
    print("="*50)
    
    print(f"监控器初始化: {'✅' if status['monitor_initialized'] else '❌'}")
    print(f"自动故障分析器: {'✅' if status['auto_fault_analyzer_initialized'] else '❌'}")
    print(f"监控运行状态: {'✅' if status['monitoring_active'] else '❌'}")
    
    if status['auto_fault_analyzer_initialized']:
        print(f"故障匹配器: {'✅' if status['fault_matcher_ready'] else '❌'}")
        print(f"Neo4j处理器: {'✅' if status['neo4j_handler_ready'] else '❌'}")
        print(f"GraphRAG检索: {'✅' if status['graphrag_ready'] else '⚠️'}")
    
    print("="*50)

def main():
    """主函数"""
    print("🚀 启动自动故障分析系统")
    print(f"启动时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    
    # 检查当前目录
    if not os.path.exists('backend/app.py'):
        print("❌ 错误: 请在项目根目录下运行此脚本")
        print("当前目录应包含 backend/ 文件夹")
        sys.exit(1)
    
    print("📁 检测到项目结构正确")
    
    # 启动后端服务
    print("\n🔧 启动后端服务...")
    print("提示: 请在新终端中运行以下命令启动后端服务:")
    print("cd backend && python app.py")
    print("\n或者直接运行:")
    print("python backend/app.py")
    
    # 等待用户启动服务
    input("\n按回车键继续（请确保后端服务已启动）...")
    
    # 等待服务启动
    status = wait_for_service()
    if not status:
        print("❌ 无法连接到后端服务")
        print("请确保:")
        print("1. 后端服务已启动 (python backend/app.py)")
        print("2. 服务运行在 http://localhost:5000")
        print("3. 所有依赖模块已正确安装")
        sys.exit(1)
    
    # 打印系统状态
    print_status(status)
    
    # 检查关键组件
    if not status['auto_fault_analyzer_initialized']:
        print("❌ 自动故障分析器未初始化")
        print("请检查:")
        print("1. Neo4j数据库连接配置")
        print("2. roothealer模块是否正确安装")
        print("3. 环境变量配置")
        sys.exit(1)
    
    if not status['fault_matcher_ready'] or not status['neo4j_handler_ready']:
        print("⚠️ 部分组件未就绪，但系统仍可运行")
    
    # 触发测试分析
    print("\n🧪 运行测试分析...")
    test_success = trigger_test_analysis()
    
    # 最终状态
    print("\n" + "="*50)
    if test_success:
        print("🎉 自动故障分析系统启动成功！")
        print("\n📋 系统功能:")
        print("• 自动检测系统异常")
        print("• 自动映射异常到故障类型")
        print("• 自动执行根因分析")
        print("• 自动生成分析报告")
        print("• 自动尝试修复故障")
        
        print("\n🌐 Web界面:")
        print("• 前端地址: http://localhost:3000")
        print("• 后端API: http://localhost:5000")
        print("• 状态检查: http://localhost:5000/api/fault-analysis-status")
        
        print("\n📁 报告位置:")
        print("• 监控报告: backend/data/reports/")
        print("• 根因分析: backend/data/rootheal_data/")
        
    else:
        print("⚠️ 系统启动完成，但测试分析未成功")
        print("请检查日志和配置")
    
    print("\n💡 提示:")
    print("• 系统将自动监控并在检测到异常时进行分析")
    print("• 可通过前端界面手动触发故障分析")
    print("• 查看日志了解详细运行状态")
    print("="*50)

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n👋 用户取消启动")
    except Exception as e:
        print(f"\n❌ 启动过程中发生错误: {e}")
        sys.exit(1)
